共计 3727 个字符,预计需要花费 10 分钟才能阅读完成。
背景
对于工作中生产环境的服务器备份,借助云的便利,我们可以使用 镜像 & 备份库 & 快照库 等方式,很轻易的实现备份和回滚。
而对于物理设备上的操作系统备份,Linux 可以使用 mkisofs & dd,制作ISO镜像。
我的办公环境和家用环境,有 Windows 和 Mac OS 设备,Mac OS有时间机器。
而 Windows 上自带的系统还原点,其实局限很大并不适用,因为还原点只能创建在系统盘,当系统盘出问题,会连带还原也未必能够使用。
onedrive 仅能备份部分设置项和文件,不能进行全量备份。
下文会展开讲讲如何实现 Windows 的全量备份。
Windows 相关知识
常用的 Win 镜像格式有:GHO、ISO、WIM、ESD。
- GHO:Ghost工具软件的镜像文件扩展名。在新版操作系统,例如 ≥ 7的版本上,一般很少再使用 GHO 方式。
- ISO:光盘镜像的存储格式之一。事实上,WIM、ESD可以被刻录到 ISO 内引用。由刻录软件或者镜像文件工具来建立。
- WIM:全称 Windows Imaging Format,微软开发的新一代镜像格式。
- 不保存分区信息,仅能备份系统盘;
- 支持文件级别的压缩;
- 可以在同一个WIM文件中存储多个镜像;
- 支持增量备份。
- ESD:全称 Executable Software Deployment,微软在 Windows 8 中引入的最新文件格式。
- 不保存分区信息,仅能备份系统盘;
- 压缩率高;
- 支持加密;
- 不支持增量备份。
由于 WIM 和 ESD 都只能备份系统盘。如果设备仅有一块硬盘,直接将系统盘制作为 WIM 或 ESD 镜像,即可完成全量备份。
如果有多块硬盘,数据盘备份,可以直接将数据复制到备份目的端,或者用 7-ZIP 等压缩工具打包后再复制,例如 NAS 或其他硬盘。
WIM 备份
WIM 和 ESD 格式的备份镜像,可以很轻易实现格式互转。下文主要介绍如何将系统打包为 WIM 镜像进行备份。
DISM
提示:DISM命令操作繁琐,仅做简单介绍,不推荐非专业人士使用
DISM 全称是”Deployment Image Servicing and Management”(部署映像服务和管理)。在 Win 7 后的操作系统中被内置。
在使用 DISM 命令进行镜像捕获时,最好提前关闭不必要的程序,避免捕获临时文件和正在运行的程序的数据,这些数据可能会造成备份失败,或者备份后系统无法还原。
当然也可以在正在运行的 Windows 操作系统中进行镜像捕获,前提是开启了卷影复制。
最好的方式是在 Windows 正常关闭后,在 PE 中使用 DISM 捕获镜像。
简单示例
捕获系统分区:
dism /capture-image /imagefile:D:\Windows10.wim /capturedir:C:\ /name:"Windows 10 Backup" /description:"Windows 10 system backup created on [日期]" /compress:maximum
- /imagefile: 指定WIM文件的保存路径和文件名
- /capturedir: 指定要捕获的目录(通常是系统所在的分区)
- /name: 给镜像一个名称
- /description: 添加描述信息
- /compress: 指定压缩级别(maximum为最高压缩)
查看WIM文件信息:
dism /get-imageinfo /imagefile:D:\Windows10.wim
应用WIM镜像(如需恢复系统):
dism /apply-image /imagefile:D:\Windows10.wim /index:1 /applydir:C:\
在应用镜像前,请确保目标分区已经正确准备(如格式化)。
在目标分区格式化前,请确保镜像未受损,能够正确释放和挂载,避免破坏现有系统盘后无法恢复。
dism /Mount-Image /ImageFile:"WIM文件路径" /Index:1 /MountDir:"挂载目标路径"
高级示例
指定排除目录:
dism /capture-image /imagefile:D:\Windows10.wim /capturedir:C:\ /name:"Windows 10 Backup" /compress:maximum /Exclude-Directory:"C:\Users\用户名\Downloads" /Exclude-Directory:"C:\Temp"
使用通配符指定排除目录:
/Exclude-Directory:"C:\Users\*\AppData"
使用文本文件列表指定排除目录:
dism /capture-image /imagefile:D:\Windows10.wim /capturedir:C:\ /name:"Windows 10 Backup" /compress:maximum /ExcludeList:C:\exclude_list.txt
DISM ++
下载地址:github.com/Chuyu-Team/Dism-Multi-language/releases
DISM ++ 不依赖于 Dism,有便利的 GUI 可用于制作和恢复wim镜像。
支持运行在 Windows 或 PE 中使用。
创建镜像
当我在需要备份的Windows 环境下创建备份,可以看到默认开启了卷影复制:
保存类型的压缩方式自行选择:
点击确定以创建镜像:
恢复镜像
恢复时当然不能再 Windows 系统中执行了,除非电脑有多块系统盘。往往在 PE 下执行恢复:
再次提醒,再格式化分区恢复镜像之前,请先测试镜像是否受损:
释放映像和挂载映像,都可用于检查。
踩坑
虚拟驱动器类
当系统盘中创建了虚拟驱动器时,例如 WPS 云盘,备份过程会产生报错:句柄无效。
此时去查看日志,翻到最后的 error 行,定位导致备份失败的路径,并加以处理。
处理方式有几种:
- 将 WPS云盘 存储目录在 WPS 中配置,移动到非系统盘
- 关闭 WPS 云盘功能
- 在 PE 中制作镜像
- 添加排除路径
当系统盘中创建了虚拟驱动器时,例如 Raidrive,备份过程中不会报错,但是还原过程会报错:未安装指定的服务 或 试图加载格式不正确的程序
查看日志可以看到
我在这里被坑惨了,最开始没有经验,在成功创建 wim 后,直接格式化了系统分区进行还原,结果还原失败。
最后使用了 7-ZIP 将 wim 镜像直接解压缩到系统盘,但是解压缩过程中 windowsapps 路径下的文件会失败,即使系统能够引导启动,但是会导致 windows 大量自带 app 和功能无法使用。
例如登录微软账号、 UWP应用(日历、计算器、设置)等等,都无法正常运行。
AMD 缓存类
AMD 核显在恢复时可能会遇到:指明特定的安全 ID 可能不能作为对象的标签分配
错误路径为:Windows\System32\config\systemprofile\AppData\Local\AMD\DxCache\
网络上亦有相同案例:github.com/Chuyu-Team/Dism-Multi-language/issues/1031、learn.microsoft.com/en-us/answers/questions/1357102/
遗憾的是,他们没有给到能够正确解决方案。
使用 wimlib 修复受损镜像
上文遇到的坑点,都是在制作镜像时,捕获到了非标准文件。
我们当然期望能有一款工具,能够在非解压缩或挂载状态,直接编辑镜像内容,移除掉故障目录以修复映像。
- 当 WIM 中包含故障文件时,WIM 无法被镜像管理工具挂载或解压释放;
- 7-ZIP 能够解压 wim ,但是会引入其他错误(windowsapp 目录下文件无法正确解压);
- 7-ZIP 仅能只读方式打开wim,无法编辑;
- dism++ 不能直接编辑 wim;
- dism 不能直接编辑 wim;
- WimTool 不能直接编辑 wim。
wimlib 可以很好的解决此问题。
wimlib 是一个开源的跨平台库,在 Windows 下以命令行方式使用。
功能:
- 应用(提取)WIM 映像 ( wimapply )
- 捕获(创建)WIM 映像 ( wimcapture )
- 附加、删除和导出 WIM 映像(wimappend、 wimdelete、 wimexport)
- 修改 WIM 映像 ( wimupdate )
- 从 WIM 映像中提取文件或目录 ( wimextract )
- 优化 WIM 档案,删除浪费的空间并可选择重新压缩 ( wimoptimize )
- 分割或合并 WIM 档案 ( wimsplit、 wimjoin )
- (仅限 Linux)安装 WIM 映像(wimmount、 wimmountrw)
命令示例:递归删除 \ProgramData\OpenBoxLab\RaiDrive\Cache\
路径下所有内容
.\wimlib-imagex.exe update "D:\系统备份\um870-2024-11-23-0001.wim" 1 --command="DELETE --recursive \ProgramData\OpenBoxLab\RaiDrive\Cache\"
删除完毕后,无需进行其他操作,即时生效。
总结
制作了 wim 镜像不代表此后高枕无忧,需要验证镜像是否可成功释放后再用于恢复环境。
尽量在 PE 环境下制作镜像避免捕获异常文件导致镜像不可用。